package cn.wolfcode.luowowo.member.service;

import cn.wolfcode.luowowo.exception.LogicException;
import cn.wolfcode.luowowo.member.domain.UserInfo;
import cn.wolfcode.luowowo.util.AjaxResult;

import java.util.List;

/**
 * 用户操作接口
 *
 * @author win
 */
public interface IUserInfoService {

    /**
     * 获取单个用户信息
     *
     * @param id
     * @return
     */
    UserInfo get(Long id);

    /**
     * 校验手机号是否存在
     *
     * @param checkPhone
     * @return true: 手机号不存在 false: 手机号已经存在
     */
    boolean checkPhone(String checkPhone);

    /**
     * 发送验证码
     *
     * @param phone
     */
    void sendVerifyCode(String phone) throws LogicException;

    /**
     * 用户信息注册
     *
     * @param phone
     * @param password
     * @param rpassword
     * @param nickname
     * @param verifyCode
     */
    void userRegist(String phone, String password, String rpassword, String nickname, String verifyCode) throws LogicException;

    /**
     * 用户登录
     *
     * @param phone
     * @param password
     * @return
     */
    String userLogin(String phone, String password);

    /**
     * 查询所有用户
     *
     * @return
     */
    List<UserInfo> list();

    /**
     * 根据用户id查询用户关注的人数
     * @param uid
     * @return
     */
    int getCountForAttention(Long uid);

    /**
     * 根据用户id查询用户的粉丝数
     * @param uid
     * @return
     */
    int getCountForFans(Long uid);

    /**
     * 根据用户id查询用户关注的用户的id
     * @param uid
     * @return 关注的所有用户id 返回数组
     */
    List<Long> getAttentionId(Long uid);

    /**
     * 根据关注用户的id查询关注用户的信息
     * @param attArray
     * @return
     */
    List<UserInfo> queryAttentionByIds(List<Long> attArray);

    /**
     * 用户的添加或编辑
     * @param userInfo
     * @return
     */
    Long saveOrUpdate(UserInfo userInfo);

    /**
     * 修改用户头像
     * @param url
     * @param id
     */
    void updateHeadImgUrl(String url, Long id);

    /**
     * 金牌数+1
     * @param i
     * @param uid
     */
    void updateGoldMedal(int i,Long uid);

    void updatePhone(String phone, String newMobile);

    /**
     * 查询金牌数量
     *
     * @param userId
     * @return
     */
    UserInfo selectJinPaiById(Long userId);

    /**
     * 关注或取消关注
     *
     * @param userInfo 当前登录用户
     * @param statusId
     * @param userId   提出问题的用户
     */
    Boolean saveOrDelete(UserInfo userInfo, Long statusId, Long userId);
}
